package cn.edu.wynu;

public class Test04 {
    public static void main(String[] args) {
        // 案例四：数字加密
        // 需求：某系统的数字密码是一个四位数，如1983，为了安全，需要加密后再传输，
        // 加密规则是:对密码中的每位数都加5,再对10求余，最后将所有数字顺序反转，得到一串加密后的新数，请设计出满足本需求的加密程序!

        System.out.println("加密后的结果是：" + encrypt(1983));
    }
    public static String encrypt(int number) {
        // number = 1983;
        // 1.把密码拆分成一个一个的数字，才可以对其进行加密
        int[] numbers = split(number);
        // numbers = {1, 9, 8, 3};

        // 2.遍历这个数组，对每个数字进行加密
        for (int i = 0; i < numbers.length; i++) {
            // i = 0 1 2 3
            numbers[i] = (numbers[i] + 5) % 10;
        }
        // numbers = {6, 4, 3, 8};

        // 3.对数组反转，把对数组进行反转的操作交给一个独立的方法完成
        reverse(numbers);
        // numbers = {8, 3, 4, 6};

        // 4.把这些加密的数字拼接起来作为加密后的结果返回
        String result = "";
        for (int i = 0; i < numbers.length; i++) {
            result += numbers[i];
        }
        return result;
    }
    public static void reverse(int[] numbers) {
        // 反转数组的值
        // numbers = {8, 3, 4, 6};
        for (int i = 0, j = numbers.length - 1; i < j; i++, j--) {
            // 交换i和j的值
            // 先把后一个位置处的值赋值给临时变量
            int temp = numbers[j];
            // 把前一个位置处的值赋值给后一个位置
            numbers[j] = numbers[i];
            // 把临时变量的值赋值给前一个位置
            numbers[i] = temp;
        }
    }
    public static int[] split(int number) {
        // number = 1983;
        int[] numbers = new int[4];
        numbers[0] = number / 1000;
        numbers[1] = (number / 100) % 10;
        numbers[2] = (number / 10) % 10;
        numbers[3] = number % 10;
        return numbers;
    }
}
